home *** CD-ROM | disk | FTP | other *** search
- /************************************************************
- * *
- * DISKDUP *
- * *
- * オンメモリ型 DISKCOPY *
- * *
- * OPTION.C *
- * *
- ************************************************************/
-
-
-
- /************************************************************
-
- インクル-ドファイル
-
- *************************************************************/
-
- #define __OPT__
-
-
- #include <io.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <dos.h>
- #include <stat.h>
- #include <string.h>
- #include <memory.h>
-
- #include "option.h"
- #include "ddupgui.h"
- #include "diskdup.h"
-
-
- unsigned long pan;
- /*char fname[256];*/
- /*char DiskData[100000];*/
- /*unsigned long dtlong;*/
- /*char Headdata[32];*/
- unsigned long dtlong;
-
-
- /************************************************************
- [オプション解析]
-
- 概要 オプションパラメ-タの解析を行い結果を返す
- 用法 optionset( argc, argv );
- 引数 int argc
- char *argv[]
- 戻り値 0 オプション無し
- -1 オプションの指定が正しくない
- -2 ヘルプを表示
- ビットが立っていない場合 / 立っている場合
- bit 0 デ-タファイルをロ-ドしない/デ-タファイルをロ-ドする
- 1 デ-タファイルを作成しない/デ-タファイルを作成する
- 2* フォ-マットを選択する /フォ-マットをしない
- 3* フォ-マットを選択する /フォ-マットをする
- 4 入力を求める /エラ-時以外は入力を求めない
-
- 注意 bit2=0 && bit3=0 の時のみフォ-マットを選択する
- ************************************************************/
- int optionset( int argc, char *argv[] )
-
- {
- int ret;
- int count;
- char c;
- ret=0;
-
-
- /* オプション パラメータ 解析 */
- if ( argc > 1 )
- {
- for ( count = 1; count < argc; count++ ) /* パラメータ の数だけ ループ */ {
- if ( ( ret != -1 ) && (ret != -2 ) )
- {
- c = *argv[count]; /* 先頭文字 get */
- /* strcpy ( str, argv[count] );
- putmessage();
- ready();*/
- if ( c == '/' || c == '-' ) /* 先頭文字は '/' or '-'*/
- {
- c = *(argv[count] + 1); /* 2 文字目 get */
- switch ( c )
- {
- case 'h':
- case 'H':
- case '?':
- ret = -2;
- break;
-
- case 'l':
- case 'L':
- flagld=1;
- ret |= 1;
- break;
-
- case 's':
- case 'S':
- flagsv=1;
- ret |= 2;
- break;
-
- case 'f':
- case 'F':
- flagfmt=2;
- ret |=8;
- break;
-
- case 'd':
- case 'D':
- flagfmt=1;
- ret |= 4;
- break;
-
- case 'i':
- case 'I':
- flagipt=1;
- ret |=16;
- break;
-
- /* 無効 パラメータ */
- default:
- ret = -1;
- } /* <switch> */
- }
- else
- {
- strcpy(fname, argv[count] );
- /* strcpy( str, fname );
- putmessage();*/
- } /* <if ( c=='/' || c=='-' )> */
- } /* <if (ret == -1 )> */
- } /* <for> */
- } /* <if (argc > 1 )> */
- return ret;
- }
-
- /***************************************************************
- [デ-タファイルを読み込む]
- 用法 loaddata();
- 引数 DiskData
- 戻り値 :0 成功
- :-1 失敗
- :1,2,3 diskのフォ-マットの種類
- ***************************************************************/
-
- int loaddata ( char *Data )
- {
- int ret;
- ret=0;
- int rsize;
- if (access(fname,0) !=0 )
- {
- flagerr=1;
- strcpy( str, "デ-タファイルが見つかりません。" );
- putmessage();
- ready();
- ret=-1;
- flagerr=0;
- }
- else
- {
- pan=_open(fname,_O_BINARY | _O_RDWR );
- if ( pan == -1 )
- {
- flagerr=1;
- strcpy( str, "ファイルのオ-プンに失敗しました。" );
- putmessage();
- ready();
- ret=-1;
- flagerr=0;
- }
- rsize = _read(pan,Headdata,32);
- if( rsize == -1 || rsize != 32 )
- {
- flagerr=1;
- strcpy( str, "ヘッダの読み込みに失敗しました。" );
- putmessage();
- ready();
- _close(pan);
- ret=-1;
- flagerr=0;
- }
- if( strncmp(Headdata,"DISKDUP ",8) !=0 )
- {
- flagerr=1;
- strcpy( str, "DISKDUPのデ-タファイルではありません。" );
- putmessage();
- ready();
- _close(pan);
- ret=-1;
- flagerr=0;
- }
- else
- {
- ret=gethead();
- rsize = _read(pan,Data,dtlong);
- if( rsize == -1 || rsize != dtlong || ret == -1 )
- {
- flagerr=1;
- _close(pan);
- strcpy( str, "デ-タファイルの読み込みに失敗しました。" );
- putmessage();
- ready();
- ret=-1;
- flagerr=0;
- }
- else
- {
- _close(pan);
- }
- }
- }
- return ret;
- }
- /***************************************************************
- [デ-タファイルを作成する]
- 用法 savedata();
- 引数 無し
- 戻り値 :0 成功
- :-1 失敗
- ***************************************************************/
-
- int savedata ( char *Data )
- {
- int ret;
- int wsize;
- ret=0;
- if (_access(fname,0) ==0 )
- {
- flagerr=1;
- strcpy( str, "同名のファイルがあります。上書きして良いですか。" );
- putmessage();
- if ( select()==1 )
- {
- ret=-1;
- }
- }
- flagerr=0;
- if (ret == 0 )
- {
- pan=_open(fname,_O_BINARY | _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE );
- if (pan == -1 )
- {
- ret=-1;
- }
- if (ret == 0 )
- {
- makehead();
- wsize = _write(pan,Headdata,32);
- if( wsize ==-1 || wsize != 32 )
- {
- flagerr=1;
- strcpy( str, "ヘッダの書き込みに失敗しました。" );
- putmessage();
- ready();
- _close(pan);
- ret=-1;
- flagerr=0;
- }
- }
- if (ret == 0 )
- {
- wsize = _write(pan,Data,dtlong);
- if( wsize == -1 || wsize != dtlong )
- {
- flagerr=1;
- strcpy( str, "デ-タの書き込みに失敗しました。" );
- putmessage();
- ready();
- _close(pan);
- _unlink(fname);
- ret=-1;
- flagerr=0;
- }
- else
- {
- _close(pan);
- }
- }
- }
- return ret;
- }
- /**********************************************************
- [ヘッドデ-タを作る]
- 用法 makehead();
- 引数 無し
- 変化する変数 Headdata
- **********************************************************/
- void makehead ( void )
- {
- switch ( disktype )
- {
- case 1:
- strncpy ( Headdata,"DISKDUP MFM 2HD 1024B/S 8S 154T ",32 );
- dtlong=1261568;
- break;
- case 2:
- strncpy ( Headdata,"DISKDUP MFM 2DD 720B/S 9S 160T ",32 );
- dtlong=737280;
- break;
- case 3:
- strncpy ( Headdata,"DISKDUP MFM 2DD 640B/S 8S 160T ",32 );
- dtlong=655360;
- break;
- default:
- strncpy ( Headdata,"DISKDUP MFM 2HD 1024B/S 8S 154T ",32 );
- dtlong=1261568;
- break;
- }
- }
- /**********************************************************
- [ヘッドデ-タからディスクタイプを得る]
- 用法 gethead();
- 引数 無し
- 戻り値 0: エラ-
- 1: 2HD 1.2M
- 2: 2DD 720K
- 3: 2DD 640K
- **********************************************************/
- int gethead ( void )
- {
- int disktypes;
- disktypes=0;
- if ( strncmp(Headdata, "DISKDUP MFM 2HD 1024B/S 8S 154T ",32 ) == 0 )
- {
- disktypes=1;
- dtlong=1261568;
- flagerr=1;
- strcpy( str, " 2HD 1.2M " );
- putmessage();
- flagerr=0;
- }
- else
- {
- if ( strncmp(Headdata, "DISKDUP MFM 2DD 720B/S 9S 160T ",32 ) == 0 )
- {
- disktypes=2;
- dtlong=737280;
- flagerr=1;
- strcpy( str, " 720K 2DD " );
- putmessage();
- flagerr=0;
- }
- else
- {
- if (strncmp(Headdata,"DISKDUP MFM 2DD 640B/S 8S 160T ",32 ) == 0 )
- {
- disktypes=3;
- dtlong=655360;
- flagerr=1;
- strcpy( str, "640K 2DD " );
- putmessage();
- flagerr=0;
- }
- else
- {
- disktypes=-1;
- }
- }
- }
- return disktypes;
- }
- /* END OF FILE */